{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c6bfe94f",
   "metadata": {},
   "source": [
    "## Caching 缓存\n",
    "\n",
    "LangChain为LLMs提供了可选的缓存层。这很有用，原因有两个：\n",
    "\n",
    "- 如果您经常多次请求相同的完成，它可以通过减少您对 LLM 提供程序进行的 API 调用次数来节省资金。\n",
    "- 它可以通过减少您对 LLM 提供程序进行的 API 调用次数来加速您的应用程序。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cfc01975",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AIMessage(content='每只兔子有4条腿，所以2只兔子共有8条腿。')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from langchain_openai import ChatOpenAI\n",
    "openai_api_key = \"EMPTY\"\n",
    "openai_api_base = \"http://127.0.0.1:1234/v1\"\n",
    "chat = ChatOpenAI(\n",
    "    openai_api_key=openai_api_key,\n",
    "    openai_api_base=openai_api_base,\n",
    "    temperature=0.7,\n",
    ")\n",
    "\n",
    "chat.invoke(\"请问2只兔子有多少条腿？\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d9f2c843",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: total: 0 ns\n",
      "Wall time: 0 ns\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "from langchain.globals import set_llm_cache\n",
    "from langchain.cache import InMemoryCache\n",
    "\n",
    "set_llm_cache(InMemoryCache())\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "33aae276",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: total: 109 ms\n",
      "Wall time: 22.6 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'标题：夏日必备，清爽解渴！康师傅绿茶带你享受健康好滋味\\n\\n亲爱的小红书朋友们，大家好呀！今天给大家分享一款我最近疯狂爱上的饮品——康师傅绿茶。炎热的夏季已经到来，每天都要喝点清凉的饮料来降降温吧？这款绿茶不仅口感清新、消暑解渴，还富含抗氧化剂和维生素C等多种营养成分，健康又好喝，实在是夏日必备良品！\\n\\n外观：康师傅绿茶的外包装设计非常简洁大气，鲜明的绿色让人一眼就能认出。瓶身采用轻巧的设计，方便随身携带。而且它的容量适中，可以满足你一次的解渴需求，也不会太重影响你的出行体验哦！\\n\\n口感：喝上一口康师傅绿茶，你会立刻被它清爽的口感所吸引。绿茶特有的清香扑鼻而来，让人心旷神怡。入口后，茶水在口中慢慢散开，没有丝毫苦涩感，反而带有一丝甘甜，非常顺滑可口。这种淡淡的甜味来自于天然蔗糖，健康又不会给人带来负担。\\n\\n营养：康师傅绿茶中富含抗氧化剂和维生素C等多种营养成分，可以有效清除体内的自由基，促进新陈代谢，增强免疫力，有助于保护心脏、眼睛等重要器官的健康。此外，它不含人工色素和防腐剂，让我们喝得更放心！\\n\\n搭配：在炎热的夏季，我们可以将康师傅绿茶与各种美食进行搭配，解锁更多惊喜体验。比如，你可以在吃火锅时来一瓶冰镇的绿茶解辣又消暑；也可以在做甜点的时候，用绿茶代替牛奶，制作出别具风味的抹茶蛋糕或拿铁咖啡；甚至在健身运动后，来上一瓶绿茶可以补充水分和电解质，帮助恢复体力！\\n\\n总结：康师傅绿茶以其清爽的口感、丰富的营养成分以及便捷的设计成为了我夏日里不可或缺的好伙伴。无论是日常解渴还是搭配美食，它都能带给我美好的体验。如果你也想要在炎热的夏季中找到一款既健康又好喝的饮品，那就快来试试这款康师傅绿茶吧！相信你也会和我一样爱上它的！\\n\\n记得点赞和关注我哦，我会继续分享更多有趣的小红书营销内容，咱们下次见啦！🌞'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "from langchain_core.output_parsers import StrOutputParser\n",
    "from langchain_core.prompts import ChatPromptTemplate\n",
    "prompt = ChatPromptTemplate.from_template(\"请根据下面的主题写一篇小红书营销的短文： {topic}\")\n",
    "output_parser = StrOutputParser()\n",
    "\n",
    "chain = prompt | chat | output_parser\n",
    "\n",
    "chain.invoke({\"topic\": \"康师傅绿茶\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c731d47c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: total: 0 ns\n",
      "Wall time: 3.05 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'标题：夏日必备，清爽解渴！康师傅绿茶带你享受健康好滋味\\n\\n亲爱的小红书朋友们，大家好呀！今天给大家分享一款我最近疯狂爱上的饮品——康师傅绿茶。炎热的夏季已经到来，每天都要喝点清凉的饮料来降降温吧？这款绿茶不仅口感清新、消暑解渴，还富含抗氧化剂和维生素C等多种营养成分，健康又好喝，实在是夏日必备良品！\\n\\n外观：康师傅绿茶的外包装设计非常简洁大气，鲜明的绿色让人一眼就能认出。瓶身采用轻巧的设计，方便随身携带。而且它的容量适中，可以满足你一次的解渴需求，也不会太重影响你的出行体验哦！\\n\\n口感：喝上一口康师傅绿茶，你会立刻被它清爽的口感所吸引。绿茶特有的清香扑鼻而来，让人心旷神怡。入口后，茶水在口中慢慢散开，没有丝毫苦涩感，反而带有一丝甘甜，非常顺滑可口。这种淡淡的甜味来自于天然蔗糖，健康又不会给人带来负担。\\n\\n营养：康师傅绿茶中富含抗氧化剂和维生素C等多种营养成分，可以有效清除体内的自由基，促进新陈代谢，增强免疫力，有助于保护心脏、眼睛等重要器官的健康。此外，它不含人工色素和防腐剂，让我们喝得更放心！\\n\\n搭配：在炎热的夏季，我们可以将康师傅绿茶与各种美食进行搭配，解锁更多惊喜体验。比如，你可以在吃火锅时来一瓶冰镇的绿茶解辣又消暑；也可以在做甜点的时候，用绿茶代替牛奶，制作出别具风味的抹茶蛋糕或拿铁咖啡；甚至在健身运动后，来上一瓶绿茶可以补充水分和电解质，帮助恢复体力！\\n\\n总结：康师傅绿茶以其清爽的口感、丰富的营养成分以及便捷的设计成为了我夏日里不可或缺的好伙伴。无论是日常解渴还是搭配美食，它都能带给我美好的体验。如果你也想要在炎热的夏季中找到一款既健康又好喝的饮品，那就快来试试这款康师傅绿茶吧！相信你也会和我一样爱上它的！\\n\\n记得点赞和关注我哦，我会继续分享更多有趣的小红书营销内容，咱们下次见啦！🌞'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "chain.invoke({\"topic\": \"康师傅绿茶\"})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ac0ea95",
   "metadata": {},
   "source": [
    "## SQLite 缓存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9db1deea",
   "metadata": {},
   "outputs": [],
   "source": [
    "# We can do the same thing with a SQLite cache\n",
    "from langchain.cache import SQLiteCache\n",
    "\n",
    "set_llm_cache(SQLiteCache(database_path=\"./db/langchain.db\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b7c42ad9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: total: 15.6 ms\n",
      "Wall time: 15.8 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'大家好，今天要介绍的是一款让人欲罢不能的小零食——旺仔小馒头。作为小红书美食达人的我，一直对各种美味又健康的食品情有独钟，而这款旺仔小馒头绝对是我的最爱之一！\\n\\n首先，让我们来谈谈它的外观。旺仔小馒头的外形非常可爱，小小的圆球状加上表面细腻的纹理，让人一眼就爱不释手。而且它还有多种颜色可选哦，满足你挑剔的味蕾和视觉享受。\\n\\n其次，就是大家最关心的味道了。旺仔小馒头有着香甜的味道，咬下去酥脆可口，入口即化，仿佛在口中融化了一颗甜甜的小炸弹。它的口感非常特别，既不是太硬也不是太软，恰到好处地满足了你的咀嚼欲望。\\n\\n更重要的是，旺仔小馒头还是一款低脂、低糖的零食。对于那些注重健康饮食的人来说，它无疑是一个不错的选择。你可以随时随地享受美味，不必担心摄入过多的热量和糖分。\\n\\n最后，不得不提的是它的便携性。旺仔小馒头的小包装设计非常贴心，方便你随身携带，无论是在办公室、学校还是旅行途中，都可以轻松享受这款美食的诱惑。\\n\\n总之，旺仔小馒头是一款外观可爱、味道香甜、健康低脂、便携易带的完美零食。无论是自己享用还是送给亲朋好友，它都是不错的选择。快来试试吧，相信你也会爱上它的！'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "chain.invoke({\"topic\": \"旺仔小馒头\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d3245e7a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: total: 391 ms\n",
      "Wall time: 417 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'大家好，今天要介绍的是一款让人欲罢不能的小零食——旺仔小馒头。作为小红书美食达人的我，一直对各种美味又健康的食品情有独钟，而这款旺仔小馒头绝对是我的最爱之一！\\n\\n首先，让我们来谈谈它的外观。旺仔小馒头的外形非常可爱，小小的圆球状加上表面细腻的纹理，让人一眼就爱不释手。而且它还有多种颜色可选哦，满足你挑剔的味蕾和视觉享受。\\n\\n其次，就是大家最关心的味道了。旺仔小馒头有着香甜的味道，咬下去酥脆可口，入口即化，仿佛在口中融化了一颗甜甜的小炸弹。它的口感非常特别，既不是太硬也不是太软，恰到好处地满足了你的咀嚼欲望。\\n\\n更重要的是，旺仔小馒头还是一款低脂、低糖的零食。对于那些注重健康饮食的人来说，它无疑是一个不错的选择。你可以随时随地享受美味，不必担心摄入过多的热量和糖分。\\n\\n最后，不得不提的是它的便携性。旺仔小馒头的小包装设计非常贴心，方便你随身携带，无论是在办公室、学校还是旅行途中，都可以轻松享受这款美食的诱惑。\\n\\n总之，旺仔小馒头是一款外观可爱、味道香甜、健康低脂、便携易带的完美零食。无论是自己享用还是送给亲朋好友，它都是不错的选择。快来试试吧，相信你也会爱上它的！'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "chain.invoke({\"topic\": \"旺仔小馒头\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f6419fca",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
